home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_11_12 / engbert / comp.c < prev    next >
Text File  |  1993-05-11  |  1KB  |  65 lines

  1. /*                               COMP.C
  2. **
  3. ** compress.c - File compression a la HUFFMAN
  4. ** using Huffman "lists".
  5. */
  6.  
  7. #include <bios.h>
  8. #include <stdio.h>
  9. #include <string.h>   /* strrchr() */
  10. #include <errno.h>
  11. #include <stdlib.h>
  12. #include <conio.h>
  13. #include <ctype.h>
  14.  
  15. #include "config.h"
  16. #include "proto.h"  /* prototypes and #defines */
  17.  
  18. unsigned int output_fsize;  /* extern in BITS.C */
  19.  
  20.  
  21. /********** compress() *************************/
  22.  
  23. int compress(long file_length) {
  24.  
  25.     unsigned char c;
  26.     unsigned long i,j;
  27.     unsigned int byte_count, character_count;
  28.     extern signed int user_byte;
  29.     /*  the original byte, global in COMP.C, LIST.C */
  30.  
  31.     output_fsize = 0;
  32.     byte_count = 0;
  33.     character_count = 0;
  34.     j = 1000;
  35.     i = 0;
  36.     init_bits();
  37.     init_list();
  38.  
  39.  
  40.     fwrite(&file_length,sizeof(file_length),1,stdout);
  41.     while ((user_byte = getc(stdin)) != EOF) {
  42.  
  43.         encode_byte(0, character_count+1, byte_count+1);
  44.         update_list(&byte_count, &character_count);
  45.  
  46.         i++;
  47.         if (i >=j) {
  48.             fprintf(stderr, "Processed %6lu bytes, "
  49.               "output filesize is %5u,%3lu %%\n",
  50.               i,output_fsize,(100LU * output_fsize)/i);
  51.             j+= 1000;
  52.         }
  53.     } /*while */
  54.  
  55.     flush_bits(); /* send off pending bits */
  56.     fflush(stdout);
  57.     if (ferror(stdout))
  58.     return WRITE_ERR;
  59.  
  60.     fprintf(stderr,"file size is %5lu\n\n",file_length);
  61.     fprintf(stderr,"output size  %5u\n",output_fsize);
  62.     return 0;
  63. } /*compress()*/
  64.  
  65.